package feevale.boteco.bean;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

import feevale.boteco.view.BotecoFrm;

public class Boteco {
	
	/**
	 * Número de geladeiras do boteco.
	 */
	public static final Integer QTD_GELADEIRAS = 3;
	
	public static Integer DEFAULT_CAPACIDADE_MAXIMA = 20;
	public static Integer DEFAULT_CAPACIDADE_MINIMA = 5;
	public static Integer DEFAULT_NUMERO_CLIENTES = 30;
	public static Integer DEFAULT_NUMERO_GARCONS = 2;
	public static Integer DEFAULT_TEMPO_CONSUMO_INICIAL = 5;
	public static Integer DEFAULT_TEMPO_CONSUMO_FINAL = 15;
	public static Integer DEFAULT_TEMPO_BUSCA_INICIAL = 1;
	public static Integer DEFAULT_TEMPO_BUSCA_FINAL = 4;
	public static Integer DEFAULT_TEMPO_REPOSICAO_INICIAL = 0;
	public static Integer DEFAULT_TEMPO_REPOSICAO_FINAL = 1;
	
	private Integer nrClientes;
	
	public static List<Geladeira> GELADEIRAS;
	public static Queue<Cliente> CLIENTES;
	public static List<TipoCerveja> TIPOS_CERVEJAS;
	public static Queue<Garcon> GARCONS;
	
	public Boteco() {
		setup();
		
		new BotecoFrm(this);
	}
	
	/**
	 * Realiza operações iniciais no boteco.
	 */
	public void setup() {
		CLIENTES = new LinkedList<Cliente>();
		TIPOS_CERVEJAS = new ArrayList<TipoCerveja>();
		GARCONS = new LinkedList<Garcon>();
		GELADEIRAS = new ArrayList<Geladeira>();
		
		tiposDeCeva();
	}
	
	/**
	 * De acordo com o número de cervejas comercializadas no boteco, popula a lista.
	 */
	private void tiposDeCeva() {
		for (int i = 1; i <= QTD_GELADEIRAS; i++) {
			
			TipoCerveja tipoCerveja = new TipoCerveja();
			tipoCerveja.setId(i);
			TIPOS_CERVEJAS.add(tipoCerveja);
		}
	}
	
	/**
	 * Retorna o próximo garçon disponível na fila de garçons do boteco.
	 * @return
	 */
	public Garcon chamaGarcon() {
		return GARCONS.poll();
	}
	
	/**
	 * Retorna o tipo de cerveja do boteco a partir do identificador da mesma.
	 * @param id
	 * @return
	 */
	public TipoCerveja getTipoCeva(Integer id) {
		TipoCerveja tipoCeva = null;
		
		for (TipoCerveja tipoCerveja : TIPOS_CERVEJAS) {
			if (tipoCerveja.getId().equals(id)) {
				tipoCeva = tipoCerveja;
			}
		}
		
		return tipoCeva;
	}
	
	/**
	 * Adiciona um cliente à lista de clientes do boteco	
	 * @param cliente
	 */
	public void addCliente(Cliente cliente) {
		CLIENTES.add(cliente);
	}
	
	/**
	 * Retorna o número de clientes do boteco.
	 * @return
	 */
	public Integer getNrClientes() {
		return nrClientes;
	}

}
